 //通过这一行，就能得到一个promise实例，表示【形式上的】 异步操作
//  什么是【形式上的】异步操作？  

const fs = require("fs")
const path = require("path")
// var promise = new Promise(function(){
//    fs.readFile(path.join(_/_dirname,"./file/1.txt"),"utf-8",(err,dataStr) => {
//        if(err) throw err
//        console.log(dataStr)
//    })
// })

function getFileByPath(fpath){
  return new Promise(function(resolve,reject){
   fs.readFile(fpath,"utf-8",(err,dataStr) => {
    //    if(err) throw err
    //    console.log(dataStr)
   //如果 读取文件失败了 调用reject形参，把失败的结果 传递给调用者
      if(err) return reject(err)
   //如果 读取文件成功了 调用resolve形参，把成功的结果 传递给调用者
      resolve(dataStr)
   // 相对于 之前 封装 的那个函数 Promise 更友好 自己封装的函数中，只能传递一个callback
   // 这个唯一的callback 既要处理成功的结果，也要处理失败的结果
   // 但是Promise 把成功 和 失败的 回调 分开了
    })
  })
  return promise
}

//  getFileByPath(path.join(__dirname,"./file/1.txt"))
// .then(function(successResult){ // 成功的回调
//    console.log(successResult + "OK")
// },function(errResult){ // 失败的回调
//    console.log(errResult.message)
// })

getFileByPath(path.join(__dirname,"./file/1.txt"))
 .then(function(succ){
     console.log(succ)
     return getFileByPath(path.join(__dirname,"./file/2.txt"))
 })
 .then(function(succ2){
     console.log(succ2)
     return getFileByPath(path.join(__dirname,"./file/3.txt"))
 })
 .then(function(succ3){
     console.log(succ3)
 })